#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <sys/wait.h>
//void GetChild(int signal)
//{
//    waitpid(-1, NULL, 0);
//    printf("get a signal: %d, pid: %d\n", signal, getpid());
//}
//
//int main()
//{
//    signal(SIGCHLD, GetChild);
//    //signal(SIGCHLD, SIG_IGN);
//    pid_t id = fork();
//    if(id == 0){
//        int ret = 5;
//        while(ret){
//            printf("我是子进程：%d\n", getpid());
//            sleep(1);
//            ret--;
//        }
//        exit(0);
//    }
//    while(1);
//    return 0;
//}

void handler(int sig)
{
     pid_t id;
     while( (id = waitpid(-1, NULL, WNOHANG)) > 0){
         printf("wait child success: %d\n", id);
     }
     printf("child is quit! %d\n", getpid());
}

int main()
{
     signal(SIGCHLD, handler);
     pid_t cid;
     if((cid = fork()) == 0){
         printf("child : %d\n", getpid());
         sleep(3);
         exit(1);
     }
     while(1){
         printf("father proc is doing some thing!\n");
         sleep(1);
     }
     return 0;
}
